package com.cw.DesignModel23.Behavioral.VisitorPattern.Visitor2;

import java.util.Iterator;

public class ListVisitor extends Visitor {
    /**
     * 当前访问的文件夹的名字
     */
    private String currentdir = "";

    /**
     * 在访问文件时被调用
     * 访问的是文件，就简单输出一下，文件的信息
     * @param file
     */
    public void visit(File file) {
        System.out.println(currentdir + "/" + file);
    }

    /**
     * 在访问文件夹时被调用
     * 访问的是文件夹，不仅输出文件夹的信息，还要递归输出子文件和子文件夹的相关信息
     * @param directory
     */
    public void visit(Directory directory) {
        System.out.println(currentdir + "/" + directory);
        String savedir = currentdir;
        currentdir = currentdir + "/" + directory.getName();
        Iterator it = directory.iterator();
        while (it.hasNext()) {
            EntryElement entry = (EntryElement) it.next();
            // 继续让当前访问者访问子文件或者文件夹
            entry.accept(this);
        }
        currentdir = savedir;
    }
}

